import { getToken, setToken, removeToken } from '@/utils/auth'
import { loginRequest, getProfileRequest } from '@/api/user'
// import router from '@/router'
import { constantRoutes, resetRouter } from '@/router'

export default {
  // namespaced 就表示当前文件是一个 vuex的子模块，加入到其他文件的modules里面去
  namespaced: true,
  // token持久化的方案： localStorage sessionStorage cookies
  state: {
    token: getToken(),
    // 默认假值  0 '' undeinfd null false
    userInfo: {},
    routes: []
  },
  getters: {},
  mutations: {
    setTokenMutations(state, payload) {
      // 下面这个变量是保存在内存里面，一刷新浏览器，变量就回复到初始值了
      state.token = payload
      // 想要刷新将数据持久化，就需要将数据保存到硬盘上
      // 内存（运行程序的地方 8GB 16GB） 硬盘（储存资料的地方512GB 1TB 1PB）
      setToken(payload)
    },
    removeTokenMutation(state) {
      // 清空token，是恢复到初始值， undefined，不是 {} 也不是null 以 getToken()的返回值为准
      state.token = undefined
      removeToken()
    },
    setUserInfoMutation(state, payload) {
      state.userInfo = payload
    },
    removeUserInfoMutation(state) {
      // 清空一个数据的时候，恢复为初始值
      state.userInfo = {}
    },
    setRoutesMutations(state, newRoutes) {
      state.routes = [...constantRoutes, ...newRoutes]
    }
  },
  actions: {
    // 登录按钮点击的时候， 触发的actions，在这里面发请求
    async setTokenActions(context, payload) {
      const res = await loginRequest(payload)
      context.commit('setTokenMutations', res.data)

      // try {
      //   // 发起登录请求
      // // loginRequest(payload).then().catch()
      //   const res = await loginRequest(payload)

      //   // router.push('/')
      //   // 在actions里面修改state值
      //   // 在actions里面 去提交mutations
      //   context.commit('setTokenMutations', res.data)
      //   return true
      // } catch (error) {
      //
      //   return false
      // }
    },
    // 参数解构
    // https://es6.ruanyifeng.com/#docs/destructuring
    async setUserInfoAction({ commit }) {
      // console.log(3)
      const res = await getProfileRequest()
      commit('setUserInfoMutation', res.data)
      // console.log(4)
      return res.data
    },
    logoutAction({ commit }) {
      // 退出登录，就是将token清空，用户信息清空
      commit('removeTokenMutation')
      // 请用户信息
      commit('removeUserInfoMutation')

      // 清空动态路由
      resetRouter()
    }
  }
}
